﻿using System;
using Ewk.Math.Algebra.Algorithms.Matrices;
using Ewk.Math.ComputationTypes;

namespace Ewk.Math.Algebra.UnitTests.Determinant.DeterminantManipulationsTests
{
    public abstract class DeterminantManipulationsTestBase<T> : AlgebraUnitTestsBase<T>
        where T : struct, IComparable, IFormattable, IConvertible, IComparable<T>, IEquatable<T>
    {
        protected IDeterminantComputer<T> DeterminantComputer { get; private set; }
        protected IMatrixManipulations<T, Computable<T>> DeterminantManipulator { get; private set; }

        protected override void AdditionalSetup()
        {
            base.AdditionalSetup();

            DeterminantComputer = MockHelper.CreateAndRegisterMock<IDeterminantComputer<T>>();
            DeterminantManipulator = MockHelper.CreateAndRegisterMock<IMatrixManipulations<T, Computable<T>>>();
        }
    }
}